perm filename PLAY.FAI[MUS,SYS] blob
sn#170430 filedate 1975-07-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE SOUND DOROTHY BENDER ****** 1969, 1975(LCS)*******
C00011 ENDMK
C⊗;
TITLE SOUND; DOROTHY BENDER ****** 1969, 1975(LCS)*******
; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
;
; NAME OF THE FILE TO BE INPUTTED IS 'MUSIC.MUS' OR 'MUSAA.DMD',
; THE FIRST RECORD OF WHICH CONTAINS THE
; NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
A ← 1 ;WORK
B ← 2 ;WORK
RET ← 3 ;RETURN ACCUMULATOR
T1 ← 4 ; TEMP FOR ADSMAP (JAM)
;;BUFSIZ ←=20224 ;****** DOUBLE THIS FOR 4-CHANNEL SOUND!!!!!
BUFSIZ ←4400*3 ;OPTIMIZED FOR 3330 DSK. (←4400*3 IN SYS VERSION)
↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
OPDEF READCH [51B8]
OPDEF MESSAGE[51B8!3B12]
BEG: CALLI 0,0 ;RESET I/O DEVICES
OPEN DSKCHN,[17 ;MODE
'DSK ' ;DEVICE NAME
0] ;NO BUFFER HEADERS
HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
MOVE 6,['MUSAA ']
MOVE 7,['DMD ']
SETZM DIR2+3 ;FOR RESTART
SETZM DIR+3 ;FOR RESTART
OUTSTR[ASCIZ/FILE NAME -- /] ;READS '.DMD' FILES ONLY.
SETZM DIR+1
SETZM DIR
SETO 5, ;FLAG FOR EXTENSIONS
MOVE 2,[POINT 6,DIR]
JRST GOT
EXT: MOVE 2,[POINT 6,DIR+1]
SETZ 5,
GOT: INCHWL 1
CAIN 1,15 ; A CR?
JRST GOT
CAIGE 1,60 ; CHECKS FOR GOOD CHARS.
JRST LX
SUBI 1,40
IDPB 1,2
JRST GOT
LX: JUMPE 5,LZ
SKIPN DIR
MOVEM 6,DIR
CAIN 1,56 ; 56='.'
JRST EXT
JRST MESS
LZ: SKIPN DIR+1
MOVEM 7,DIR+1
;FIND OUT NUMBER OF CHANNELS AND THE SPEED.
MESS: MESSAGE [ASCIZ/ HOW MANY CHANNELS? /]
READCH A
SUBI A,"0"+1 ;CONVERT TO BINR AND ADD 1
DPB A,[POINT 2,OUTBIT,26]
SPD: MESSAGE [ASCIZ/ SPEED? /]
READCH A
CAIG A,65 ;IS IT 1 - 5?
JRST SPD2 ;YES
SKIPN DIR+3 ;IS THIS THE 1ST TIME THRU?
JRST SPD ;YES, SO WE NEED A GOOD NUM.
JRST PLA2 ;ANYTHING ELSE WILL REPLAY
SPD2: SUBI A,"0"
DPB A,[POINT 3,OUTBIT,32]
PLA2: SETZM DIR+3
SETZM DIR2+3
MOVE 5,DMD ;GET 'DMD '
LOOKUP DSKCHN,DIR
SKIPA ;CAN'T FIND MUSAA.DMD
JRST XOPEN ;FOUND IT
CAMN 5,DIR+1 ;IS DIR+1='DMD '?
JRST MUS ;YES, GO LOOK FOR MUSIC.MUS
MOVEM 5,DIR+1
JRST PLA2 ;TRY IT WITH 'DMD '
MUS: LOOKUP DSKCHN,DIR2 ;TRY FOR MUSIC.MUS
JRST [MESSAGE[ASCIZ/
*** MUSIC FILE NOT FOUND/]
CALLI 12]
;EXIT IF FILE IS MISSING
MOVE A,DIR2+3 ;GET LENGTH OF MUSIC.MUS
MOVEM A,DIR+3;PUT IT IN RIGHT PLACE
XOPEN: OPEN ADCHN,[117 ;MODE
'AD ' ;DEVICE NAME
0] ;NO BUFFER HEADERS
JRST [MESSAGE[ASCIZ/
***D-A NOT AVAILABLE/]
CALLI 12]
;EXIT IF D-A IS UNAVAILABLE
XGPOK: MOVSI 'XGP' ;DOWN TO SPWAR FOR XGP CONFLICT.
DEVUSE 0,
HLRZ 0,0
CAIN 400000
JRST SPWAR
INIT 16,17
SIXBIT .XGP.
0
JRA 16,2(16)
SPWAR: LOCK A,
;; SPCWAR 17,[CALLI]
MESSAGE [ASCIZ/ GO? /]
READCH A
LNTH: movs a,DIR+3 ;get length of file.
movnm a,nwd
;-----------------------------------------------------
;BEGIN MAIN BODY OF PROGRAM
MOVE T1,[647004,,0]
ADSMAP T1, ; SET AUDIO SWITCH TEMPORARILY TO DAC (JAM 7/24/75)
; THE OPTIONS WE ASKED FOR ARE TEMPORARY, WAIT FOR
; PAGE TO FINISH, DON'T INTERRUPT WITH MORE PAGES,
; DELAY BEEPS TO END OF XFR.
OUTSTR [ASCIZ /
TO DAC . . ./]
LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
BUF1-1 ;USE BUF1 FOR THE I/O
JUMPLE B,OUT ;DONE
JSP RET,SUB ;CALL IT AGAIN
BUF2-1 ;USE BUF2 FOR THE I/O
JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
OUT: close dskchn, ;END OF PROGRAM.
releas adchn,
OUTSTR [ASCIZ / DONE!
/]
SETO T1,
ADSMAP T1, ; RESET AUDIO SWITCH CONNECTION TO PERMANENT (JAM 7/24/75)
;; SPCWAR 0,'SSW'
UNLOCK
RELEASE 16,
jrst SPD
;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
; 1(RET) WILL BE THE RETURN
; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
; PUT IN THE RIGHT HALF OF THE IOWD.
; A WILL BE A WORK REGISTER
; B WILL BE TESTED ON THE OUTSIDE.
SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
ADDB A,NWD ;A←NWD-BUFSIZ
;NWD←NWD-BUFSIZ
MOVE B,A ;SAVE B TO BE TESTED FOR LAST
;TIME.
JUMPL A,LAST ;SET UP FOR LAST TIME.
MOVEI A,0
;THE IOWD LOOKS LIKE:
; [-BUFSIZ / BUFI-1]
LAST: ADDI A,BUFSIZ
MOVNS A ;COMPLEMENT A
HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
;TO THE LEFT SIDE OF A.
MOVSM A,INLIST ;SWAP A AND MOVE IT.
MOVSM A,OUTWC ;SAME FOR OUTPUT.
INPUT DSKCHN,INLIST ;READ A RECORD.
OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
JRST 1(RET) ;RETURN
;---------------------------------------------------------
; STORAGE:
NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
DMD: 'DMD '
DIR2: 'MUSIC ' ;FILENAME FOR INPUT
'MUS ' ;EXTENSION
0 ;INFORMATION ON FILE
0 ;PROJECT PROG#
DIR: 0 ;NAME
0 ;EXTENSION
0 ;INFORMATION ON FILE
0 ;PROJECT PROG#
CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
0
INLIST: 0 ;WILL CONTAIN AN IOWD
0
OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
3650 ;MAGIC BITS FOR 136.
OUTBIT: 4000 ;BITS FOR D-A
BLOCK 2
A←1
B←2
D←3
ichn←adchn
END BEG